// 引入 Model
const { Category } = require("../model/categories");

// 获取分类列表
exports.getCategoryList = async (req, res, next) => {
  try {
    // 当前是第几页
    const page = Math.max(req.query.page * 1, 1) - 1;
    // 每页有几条数据
    const { per_page = 10 } = req.query;
    const perPage = Math.max(per_page * 1, 1);
    const keyword = new RegExp(req.query.keyword);

    // 1.查询所有分类
    const data = await Category.find({ name: keyword })
      .limit(perPage)
      .skip(page * perPage);

    // 2.响应
    if(!data) return res.status(400).json({
      code: 400,
      msg: "查找分类列表失败"
    })  

    // 3.成功
    res.status(200).json({
      code: 200,
      msg: "分类获取成功",
      data
    })
  } catch (err) {
    next(err);
  }
};

// 获取指定分类
exports.getCategory = async (req, res, next) => {
  try {
    // 1.检测分类是否存在
    const id = req.params.id;
    if(!id) {
      return res.status(400).json({
        code: 400,
        msg: "请传入分类 id"
      })
    }

    // 2.获取分类
    const data = await Category.findById(id)

    // 3.检测
    if(!data) {
      return res.status(400).json({
        code: 400,
        msg: "获取信息失败,请稍后再试",
        value: {
          id
        }
      })
    }

    res.status(200).json({
      code: 200,
      msg: "分类信息获取成功",
      data
    })

  } catch (err) {
    next(err);
  }
};

// 新增分类
exports.createCategory = async (req, res, next) => {
  try {
    // 1.检测分类是否已经存在
    const data = req.body
    let cate = await Category.findOne(data)
    // 2.若分类信息已存在
    if(cate) {
      return res.status(400).json({
        code: 400,
        msg: "分类已存在",
        value: data
      })
    }
    // 3.创建
    cate = new Category(data)
    await cate.save()

    res.status(200).json({
      code: 200,
      msg: "分类添加成功",
      data
    })
  } catch (err) {
    next(err);
  }
};

// 更新分类
exports.updateCategory = async (req, res, next) => {
  try {
    // 1.检测id信息
    const id = req.params.id;
    if(!id) {
      return res.status(400).json({
        code: 400,
        msg: "请传入id"
      })
    }
    // 2.更新
    const data = await Category.findByIdAndUpdate(id, req.body, {new : true})

    // 3.检测是否成功
    if(!data) return res.status(400).json({
      code: 400,
      msg: "编辑分类失败",
      value: req.body
    })

    res.status(200).json({
      code: 200,
      msg: "编辑成功",
      data
    })

  } catch (err) {
    next(err);
  }
};

// 删除分类
exports.deleteCategory = async (req, res, next) => {
  try {
    const id = req.params.id
    const data = await Category.findByIdAndDelete(id)
    if(!data) return res.status(400).json({
      code: 400,
      msg: "分类删除失败",
      value: {
        id
      }
    })

    res.status(200).json({
      code: 200,
      msg: "删除分类成功",
      data
    })

  } catch (err) {
    next(err);
  }
};
